﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Caching.Distributed;

namespace NetCore.Cache
{
    public class MongoDBService : ICacheService
    {
        
        private static MongoDBService _instance;
        public static MongoDBService Instance
        {
            get
            {
                if (_instance == null)
                {
                    //new MemoryCache(Options.Create(new MemoryCacheOptions()))
                    _instance = new MongoDBService();
                }
                return _instance;
            }
        }
        public bool Add(string key, object value)
        {
            throw new NotImplementedException();
        }

        public bool Add(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte)
        {
            throw new NotImplementedException();
        }

        public bool Add(string key, object value, TimeSpan expiresIn, bool isSliding = false)
        {
            throw new NotImplementedException();
        }

        public Task<bool> AddAsync(string key, object value)
        {
            throw new NotImplementedException();
        }

        public Task<bool> AddAsync(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte)
        {
            throw new NotImplementedException();
        }

        public Task<bool> AddAsync(string key, object value, TimeSpan expiresIn, bool isSliding = false)
        {
            throw new NotImplementedException();
        }

        public bool Clear()
        {
            throw new NotImplementedException();
        }

        public bool Exists(string key)
        {
            throw new NotImplementedException();
        }

        public Task<bool> ExistsAsync(string key)
        {
            throw new NotImplementedException();
        }

        public byte[] Get(string key)
        {
            throw new NotImplementedException();
        }

        public IDictionary<string, object> GetAll(List<string> keys)
        {
            throw new NotImplementedException();
        }

        public Task<IDictionary<string, object>> GetAllAsync(List<string> keys)
        {
            throw new NotImplementedException();
        }

        public Task<byte[]> GetAsync(string key, CancellationToken token = default(CancellationToken))
        {
            throw new NotImplementedException();
        }

        public T GetCache<T>(string key) where T : class, new()
        {
            throw new NotImplementedException();
        }

        public object GetCache(string key)
        {
            throw new NotImplementedException();
        }

        public Task<T> GetCacheAsync<T>(string key) where T : class, new()
        {
            throw new NotImplementedException();
        }

        public Task<T> GetCacheAsync<T>(string key, Func<T> acquire) where T : class, new()
        {
            throw new NotImplementedException();
        }

        public Task<object> GetCacheAsync(string key)
        {
            throw new NotImplementedException();
        }

        public T GetOrCreate<T>(string key, Func<T> acquire) where T : class, new()
        {
            throw new NotImplementedException();
        }

        public T GetOrCreate<T>(string key, Func<T> acquire, bool isSliding) where T : class, new()
        {
            throw new NotImplementedException();
        }

        public void Refresh(string key)
        {
            throw new NotImplementedException();
        }

        public Task RefreshAsync(string key, CancellationToken token = default(CancellationToken))
        {
            throw new NotImplementedException();
        }

        public void Remove(string key)
        {
            throw new NotImplementedException();
        }

        public void RemoveAll(List<string> keys)
        {
            throw new NotImplementedException();
        }

        public Task RemoveAllAsync(List<string> keys)
        {
            throw new NotImplementedException();
        }

        public Task RemoveAsync(string key, CancellationToken token = default(CancellationToken))
        {
            throw new NotImplementedException();
        }

        public bool RemoveCache(string key)
        {
            throw new NotImplementedException();
        }

        public Task<bool> RemoveCacheAsync(string key)
        {
            throw new NotImplementedException();
        }

        public void Set(string key, byte[] value, DistributedCacheEntryOptions options)
        {
            throw new NotImplementedException();
        }

        public Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options, CancellationToken token = default(CancellationToken))
        {
            throw new NotImplementedException();
        }
    }
}
